package avicit.bdp.dgs.qa.service;

import avicit.bdp.common.base.BaseService;
import avicit.bdp.core.enums.DataStateEnum;
import avicit.bdp.dgs.qa.dao.RuleTemplateHistoryDAO;
import avicit.bdp.dgs.qa.dto.RuleTemplateHistoryDTO;
import avicit.bdp.dgs.qa.utils.enums.*;
import avicit.platform6.api.system.ConvertColumnClient;
import avicit.platform6.api.system.impl.SystemConstant;
import avicit.platform6.commons.utils.BusinessUtil;
import java.util.*;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @金航数码科技有限责任公司 @作者：developer @邮箱：developer@avic-digital.com @创建时间：
 * 2023-03-15 @类说明：RuleTemplateHistoryService @修改记录： @注意事项： @主要功能：规则模板历史记录Service
 */
@Service
public class RuleTemplateHistoryService
    extends BaseService<RuleTemplateHistoryDAO, RuleTemplateHistoryDTO> {
  @Autowired private ConvertColumnClient convertColumnClient;

  /**
   * @param idList
   * @return
   */
  int deleteRuleTmplHistoryByCond(List<String> idList) {
    return this.mapper.deleteRuleTmplHistoryByCond(idList);
  }

  /**
   * 查看历史版本详情
   *
   * @param id
   * @return
   */
  @Transactional
  public RuleTemplateHistoryDTO getRuleTmplHistoryDetail(String id) {
    if (StringUtils.isBlank(id)) {
      return null;
    }

    RuleTemplateHistoryDTO dto = this.mapper.getRuleTmplHistoryDetail(id);
    if (dto == null) {
      return null;
    }

    // 转换
    valueConvert(Arrays.asList(dto));

    return dto;
  }

  /**
   * 根据模板获取历史版本
   *
   * @param templateId
   * @return
   */
  @Transactional
  public List<RuleTemplateHistoryDTO> getRuleTmplHistoryList(String templateId) {
    if (StringUtils.isBlank(templateId)) {
      return Lists.newArrayList();
    }

    List<RuleTemplateHistoryDTO> queryRet = this.mapper.getRuleTmplHistoryList(templateId);
    valueConvert(queryRet);

    return queryRet;
  }

  /**
   * 根据模板获取历史版本
   *
   * @param templateId
   * @return
   */
  @Transactional
  public String getMaxVersion(String templateId) {
    if (StringUtils.isBlank(templateId)) {
      return null;
    }

    return this.mapper.getMaxVersion(templateId);
  }

  /**
   * 通过平台API将字段值转换为名称，包括通用选择组件、通用代码
   *
   * @param dtoList
   */
  private void valueConvert(List<RuleTemplateHistoryDTO> dtoList) {
    if (CollectionUtils.isEmpty(dtoList)) {
      return;
    }

    // 设置创建者名称
    Map<String, Set<String>> convertFormData = new HashMap<>();
    for (RuleTemplateHistoryDTO dto : dtoList) {
      BusinessUtil.createConvertSet(convertFormData, SystemConstant.USER, dto.getCreatedBy());
    }
    if (convertFormData.size() > 0) {
      // 获取请求结果
      Map<String, Map<String, String>> convertResultData =
          convertColumnClient.replace(convertFormData);
      // 循环设置Alias或Name的值
      for (RuleTemplateHistoryDTO dto : dtoList) {
        dto.setCreatedBy(
            BusinessUtil.convertFormat(convertResultData, SystemConstant.USER, dto.getCreatedBy()));
      }
    }

    // 设置版本信息
    for (RuleTemplateHistoryDTO dto : dtoList) {
      dto.setStateName(DataStateEnum.getDescByCode(dto.getState()));
      dto.setTemplateTypeName(TemplateType.getDescByCode(dto.getTemplateType()));
      dto.setRuleTypeName(RuleType.getDescByCode(dto.getRuleType()));
      dto.setRuleDimensionName(RuleDimension.getDescByCode(dto.getRuleDimension()));
      dto.setMeasureTypeName(StatFuncType.getDescByCode(dto.getMeasureType()));
      dto.setStatDataTypeName(StatDataType.getDescByCode(dto.getStatDataType()));
    }
  }
}
